package com.zzh.partnersys.ai.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zzh.partnersys.ai.entity.AiAssistantDO;
import com.zzh.partnersys.ai.entity.request.AiAssistantDocRequest;
import com.zzh.partnersys.ai.entity.response.AiAssistantVO;

import java.util.List;

/**
 * <p>
 * AI助手表 服务类
 * </p>
 *
 * @author zzh
 * @since 2025-01-XX
 */
public interface AiAssistantService extends IService<AiAssistantDO> {

    /**
     * 创建AI助手
     *
     * @param userId        用户ID
     * @param assistantName 助手名称
     * @param roleDesc      角色信息
     * @param greeting      开场白
     * @param docList       文档列表
     * @return 创建的助手对象
     */
    AiAssistantDO createAssistant(Long userId, String assistantName, String roleDesc, String greeting, List<AiAssistantDocRequest> docList);

    /**
     * 更新AI助手信息
     *
     * @param assistantId   助手ID
     * @param userId        用户ID（用于权限校验）
     * @param assistantName 助手名称
     * @param roleDesc      角色信息
     * @param greeting      开场白
     * @return 更新后的助手对象
     */
    AiAssistantDO updateAssistant(Long assistantId, Long userId, String assistantName, String roleDesc, String greeting);

    /**
     * 删除AI助手（逻辑删除）
     *
     * @param assistantId 助手ID
     * @param userId      用户ID（用于权限校验）
     * @return 是否删除成功
     */
    boolean deleteAssistant(Long assistantId, Long userId);

    /**
     * 设置默认助手
     *
     * @param assistantId 助手ID
     * @param userId      用户ID（用于权限校验）
     * @return 是否设置成功
     */
    boolean setDefaultAssistant(Long assistantId, Long userId);

    /**
     * 获取用户的默认助手
     *
     * @param userId 用户ID
     * @return 默认助手对象，如果没有则返回null
     */
    AiAssistantDO getDefaultAssistant(Long userId);

    /**
     * 获取用户的所有助手列表（从缓存或数据库）
     * 包含助手信息和关联的文档列表
     *
     * @param userId 用户ID
     * @return 助手列表（包含文档信息）
     */
    List<AiAssistantVO> getUserAssistants(Long userId);

    /**
     * 根据ID获取助手（从缓存或数据库）
     *
     * @param assistantId 助手ID
     * @return 助手对象
     */
    AiAssistantDO getAssistantById(Long assistantId);

    /**
     * 启用/禁用助手
     *
     * @param assistantId 助手ID
     * @param userId      用户ID（用于权限校验）
     * @param status      状态（0-禁用，1-启用）
     * @return 是否更新成功
     */
    boolean updateAssistantStatus(Long assistantId, Long userId, Integer status);
}

